﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using LogicaNegocio;
using AccesoBD;
using Reportes;

namespace PresentacionEscritorio
{
    public partial class frmActualizarHistoriaClinica : Form, IPractica
    {
        #region ATRIBUTOS
        public Paciente oP { get; set; }
        public Medico oM { get; set; }
        public HistoriaClinica hC { get; set; }
        private GestorTiposDocumento gt = new GestorTiposDocumento();
        private GestorSexos gS = new GestorSexos();
        private GestorHistorialClinicos gHC = new GestorHistorialClinicos();
        private HistoriaClinica hc = new HistoriaClinica();
        private List<Antecedentes> listAnt = new List<Antecedentes>();
        private List<Practica> listPrac = new List<Practica>();
        public TipoModalidad timpoModalidad { get; set; }
        public long idTurno { get; set; }
        public int idEstadoTurno { get; set; }
        public long idOrdenLLegada { get; set; }
        DetalleHC oDHc = new DetalleHC();
        HistoriaClinica oHc = new HistoriaClinica();

        public enum EstadoControles
        {
            modificado, noModificado
        }
        public enum EstadoChkBox
        {
            modificado, noModificado
        }
        public enum EstadoForm
        {
            modificado, Nuevo, consultando

        }
        public enum EstadoCmb
        {
            modificado, noModificado
        }
        EstadoCmb oECMB = EstadoCmb.noModificado;
        EstadoChkBox oEChk = EstadoChkBox.noModificado;
        EstadoControles oEcontrols = EstadoControles.noModificado;
        EstadoForm oEform = EstadoForm.consultando;
        #endregion

        public frmActualizarHistoriaClinica()
        {
            InitializeComponent();
        }

        private void frmActualizarHistoriaClinica_Load(object sender, EventArgs e)
        {
            //READ ONLY AL FACTOR RH Y GRP SANGUINEO EN CASO DE DE NO SEA LA PRIMERA VEZ QUE SE CARGAN LOS DATOS
            cmbGrpSang.Enabled = false;
            cmbFactorRH.Enabled = false;

            txtAltura.ReadOnly = false;
            txtPeso.ReadOnly = false;
            //-------
            //---BOTONES  Y NUEVO DESHABILITADOS
            btnAgregarPractice.Enabled = false;
            btnNuevaHC.Enabled = true;
            //-----
            txtFechaHora.Text = DateTime.Now.ToString();
            cargarCampos();
            deshabilitarPanelHC();
            deshabilitarPanelActualizarHC();

        }




        //-----------------------
        #region CARGAMOS LOS DATOS DE LA HC ANTERIORES
        //CARGAMOS GRILLA CON LOS DETALLES HC
        private void cargarGrillaDetalleHC(List<DetalleHC> lstDet)
        {
            dtDetalleHC.Rows.Clear();
            foreach (DetalleHC oD in lstDet)
            {
                int i = dtDetalleHC.Rows.Add();
                dtDetalleHC.Rows[i].Cells["FechaHora"].Value = oD.fechaAtencion.ToString("dd/MM/yyyy") + ", " + oD.horaInicio;
                dtDetalleHC.Rows[i].Cells["Especialidad"].Value = oD.especialidad.Nombre;
                dtDetalleHC.Rows[i].Cells["profesional"].Value = oD.medico.ApellidoNombre;
                dtDetalleHC.Rows[i].Cells["Observaciones"].Value = oD.descripcionAtencion;
                dtDetalleHC.Rows[i].Cells["indicaciones"].Value = oD.indicaciones;
                dtDetalleHC.Rows[i].Cells["idDetalle"].Value = oD.codDetalle;

                if (oD.altura != null)
                {
                    txtAltura.Text = oD.altura.ToString();

                }
                if (oD.peso != null)
                {
                    txtPeso.Text = oD.peso.ToString();

                }


            }
        }//----
        //CARGAMOS LOS ANTECEDENTESXPACIENTE EN CADA COMBO
        private void cargarComboAntecedentesPorPaciente(List<Antecedentes> lstAnte)
        {
            foreach (Antecedentes oA in lstAnte)
            {
                switch (oA.id)
                {
                    case 1:
                        chkDiab.Checked = true;
                        break;
                    case 2:
                        chkHepat.Checked = true;
                        break;
                    case 3:
                        chkAsma.Checked = true;
                        break;
                    case 4:
                        chkHiper.Checked = true;
                        break;
                    case 5:
                        chkCan.Checked = true;
                        break;
                    case 6:
                        ChkCar.Checked = true;
                        break;
                    case 7:
                        ChkEnfMent.Checked = true;
                        break;
                    case 8:
                        ChkEnfAlerg.Checked = true;
                        break;
                }
            }

        }//------------
        //OBTENEMOS DIAGNOSICOS
        private void cargarDiagnostico()
        {
            cmbDiagnostico.DataSource = gHC.obtenerDiagnostico();
            cmbDiagnostico.DisplayMember = "Nombre";
            cmbDiagnostico.ValueMember = "id";
        }//---------
        //OBTENEMOS LOS ANTECEDENTES SELECCIONADOS EN LA NUEVA HC 
        #endregion
        //--------------------

        //CARGAMOS GRILLA CON LA ATENCION DE HOY
        private void cargarGrillaAtencionActual(DetalleHC oD)
        {
            int i = dtDetalleHC.Rows.Add();
            dtDetalleHC.Rows[i].Cells["FechaHora"].Value = oD.fechaAtencion.ToString("dd/MM/yyyy") + ", " + oD.horaInicio;
            dtDetalleHC.Rows[i].Cells["Especialidad"].Value = oD.especialidad.Nombre;
            dtDetalleHC.Rows[i].Cells["profesional"].Value = oD.medico.ApellidoNombre;
            dtDetalleHC.Rows[i].Cells["Observaciones"].Value = oD.descripcionAtencion;
            dtDetalleHC.Rows[i].Cells["indicaciones"].Value = oD.indicaciones;
            dtDetalleHC.Rows[i].Cells["idDetalle"].Value = oD.codDetalle;

            if (oD.altura != null)
            {
                txtAltura.Text = oD.altura.ToString();

            }
            if (oD.peso != null)
            {
                txtPeso.Text = oD.peso.ToString();

            }

        }
        //CALCULAR EDAD DE PACIENTE
        private int Calcula_Edad(DateTime Fec_Nacimineto)
        {
            int age = DateTime.Now.Year - Fec_Nacimineto.Year;

            if (DateTime.Now.Month < Fec_Nacimineto.Month || (DateTime.Now.Month == Fec_Nacimineto.Month && DateTime.Now.Day < Fec_Nacimineto.Day))
                age = age - 1;

            return age;
        }


        //CARGAMOS LOS CAMPOS DE INICIO

        private void cargarCampos()
        {
            txtNrHc.ReadOnly = true;
            txtNrHc.Enabled = true;
            txtApellidoNombPac.ReadOnly = true;
            txtApellidoNombPac.Enabled = true;
            txtTDyND.ReadOnly = true;
            txtTDyND.Enabled = true;
            txtFechaNac.Enabled = true;
            txtFechaNac.ReadOnly = true;
            txtSexo.ReadOnly = true;
            //CARGAMOS LOS CAMPOS DE INICIO COMO NOMBRE, APELLIDO, FACTOR RH...PACIENTE
            txtNrHc.Text = oP.nroHC.ToString();
            txtApellidoNombPac.Text = oP.Apellido.ToString() + oP.Nombre.ToString();
            txtTDyND.Text = gt.obtenerTipodDocumentoXCod(oP.CodTipoDoc).Nombre.ToString() + ", " + oP.NroDocumento;
            txtFechaNac.Text = oP.FechaNacimiento.Value.ToString("dd/MM/yyyy");
            Sexo oS = new Sexo();
            oS = gS.obtenerSexosXCod(oP.CodSexo);
            List<Sexo> lsS = new List<Sexo>();
            lsS.Add(oS);
            txtSexo.Text = gS.obtenerSexosXCod(oP.CodSexo).Nombre;


            //CARGAMOS LOS COMBO FRH Y GRPSANG
            cmbGrpSang.DataSource = GestorHistorialClinicos.obtenerGrpSang();
            cmbGrpSang.DisplayMember = "nombre";
            cmbGrpSang.ValueMember = "id";
            cmbGrpSang.SelectedIndex = -1;
            cmbFactorRH.DataSource = GestorHistorialClinicos.obtenerFRH();
            cmbFactorRH.DisplayMember = "nombre";
            cmbFactorRH.ValueMember = "id";
            cmbFactorRH.SelectedIndex = -1;
            //---
            DateTime fechaNac = DateTime.Parse(oP.FechaNacimiento.ToString());
            lblEdadXAños.Text = "Edad: " + Calcula_Edad(fechaNac);//FALTA METODO OBTENER EDAD
            //VERIFICAMOS SI POSEE FACTOR RH y GRPSANGUINEO REGISTRADO PREVIAMENTE 
            hc = gHC.obtenerHistoriaClinica(oP.nroHC);
            if (hc.factorRH != null)
            {
                cmbFactorRH.Enabled = false;
                int idFh = int.Parse(hc.factorRH.ToString());
                FactorRH fh = GestorHistorialClinicos.obtenerFRH(idFh);
                cmbFactorRH.Text = fh.nombre;

            }
            if (hc.grupoSanguineo != null)
            {
                cmbGrpSang.Enabled = false;
                int idGs = int.Parse(hc.grupoSanguineo.ToString());
                GrupoSanguineo oGS = GestorHistorialClinicos.obtenerGrpSang(idGs);
                cmbGrpSang.Text = oGS.nombre;
            }

            //CARGAMOS LOS DIAGNOSTICOS EN EL CMB
            cargarDiagnostico();
            //VERIFICAMOS SI POSEE DESCRIPCION DE ANTECEDENTES Y ANTECEDENTES FAMILIARES Y OTRAS OBSERVACIONES
            if (!string.IsNullOrEmpty(hc.antecedentesFamiliares))
            {
                txtAnteceFam.Text = hc.antecedentesFamiliares;
            }
            if (!string.IsNullOrEmpty(hc.Observaciones))
            {
                txtOtrasObser.Text = hc.Observaciones;
            }
            //CARGAMOS LA GRILLA DE HC DEL PACIENTE

            if (hc.detalleHC != null)
            {
                cargarGrillaDetalleHC(hc.detalleHC);
            }
            //CARGAMOS LOS ANTECEDENTES PO PACIENTE EN LOS COMBOS.
            if (hc.antecedentesXPaciente != null)
            {
                cargarComboAntecedentesPorPaciente(hc.antecedentesXPaciente);
            }

        }//---------
        //AGREGAMOS A LA LISTA ANTECEDENTES LOS CHK SELECCIONADOS
        private void ListaChekBox()
        {
            Antecedentes at = null;
            if (chkDiab.Checked)
            {
                at = new Antecedentes();
                at.id = 1;
                listAnt.Add(at);
                at = null;
            }
            if (chkHepat.Checked)
            {
                at = new Antecedentes();
                at.id = 2;
                listAnt.Add(at);
                at = null;
            }
            if (ChkAs.Checked)
            {
                at = new Antecedentes();
                at.id = 3;
                listAnt.Add(at);
                at = null;
            }
            if (chkHiper.Checked)
            {
                at = new Antecedentes();
                at.id = 4;
                listAnt.Add(at);
                at = null;
            }
            if (chkCan.Checked)
            {
                at = new Antecedentes();
                at.id = 5;
                listAnt.Add(at);
                at = null;
            }
            if (ChkCar.Checked)
            {
                at = new Antecedentes();
                at.id = 6;
                listAnt.Add(at);
                at = null;
            }
            if (ChkEnfMent.Checked)
            {
                at = new Antecedentes();
                at.id = 7;
                listAnt.Add(at);
                at = null;
            }
            if (ChkEnfAlerg.Checked)
            {
                at = new Antecedentes();
                at.id = 8;
                listAnt.Add(at);
                at = null;
            }
            if (chkOtras.Checked)
            {
                at = new Antecedentes();
                at.id = 9;
                listAnt.Add(at);
                at = null;
            }
        }//---------
        //BTN ACEPTAR REGISTRAMOS LA NUEVA HC--------
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            switch (oEform)
            {



                case EstadoForm.Nuevo:
                    verificarEstadoForm();
                    if (oEcontrols == EstadoControles.modificado || oEChk == EstadoChkBox.modificado)
                    {

                        DialogResult r = MessageBox.Show("¿Desea registrar nueva historia clinica?", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        if (r == DialogResult.OK)
                        {

                            if (!string.IsNullOrEmpty(txtDescrAtencion.Text))
                            {
                                if (validar() == true)
                                {
                                    ListaChekBox();


                                    oHc.nrohC = oP.nroHC;

                                    oHc.antecedentesFamiliares = txtAnteceFam.Text;
                                    oHc.Observaciones = txtOtrasObser.Text;
                                    if (listAnt.Count > 0)
                                    {
                                        HistoriaClinica hc2 = gHC.obtenerHistoriaClinica(oP.nroHC);
                                        foreach (Antecedentes oA in hc2.antecedentesXPaciente)
                                        {
                                            for (int i = 0; i < listAnt.Count; i++)
                                            {
                                                if (oA.id == listAnt.ElementAt(i).id)
                                                {
                                                    listAnt.RemoveAt(i);

                                                }
                                            }
                                        }
                                        if (listAnt.Count == 0)
                                        {
                                            oHc.antecedentesXPaciente = null;
                                        }
                                        else
                                        {
                                            oHc.antecedentesXPaciente = listAnt;
                                            listAnt = null;
                                        }
                                    }

                                    //Creamos Detalle de historia clinica.

                                    oDHc.fechaAtencion = DateTime.Now;
                                    oDHc.nroHc = oP.nroHC;
                                    oDHc.descripcionAtencion = txtDescrAtencion.Text;
                                    oDHc.especialidad = new Especialidad();
                                    oDHc.especialidad.Nombre = oM.especialidad.Nombre;
                                    oDHc.especialidad.CodEspecialidad = oM.especialidad.CodEspecialidad;
                                    oDHc.medico = new Medico();
                                    oDHc.medico.ApellidoNombre = oM.ApellidoNombre;
                                    oDHc.medico.Legajo = oM.Legajo;
                                    oDHc.diagnostico = new Diagnostico();
                                    oDHc.diagnostico.id = int.Parse(cmbDiagnostico.SelectedValue.ToString());
                                    oDHc.diagnostico.nombre = cmbDiagnostico.SelectedText;
                                    if (!string.IsNullOrEmpty(txtAltura.Text))
                                    {
                                        oDHc.altura = int.Parse(txtAltura.Text);
                                    }
                                    if (!string.IsNullOrEmpty(txtPeso.Text))
                                    {
                                        oDHc.peso = int.Parse(txtPeso.Text);
                                    }
                                    oDHc.horaInicio = DateTime.Now.TimeOfDay;
                                    oDHc.horaFina = DateTime.Now.TimeOfDay;
                                    oDHc.indicaciones = txtIndicaciones.Text;
                                    if (listPrac.Count > 0)
                                    {
                                        oDHc.lstPractica = listPrac;
                                    }
                                    //ASIGNAMOS EL NUEVO DETALLE A LA HISTORIA CLINICA.
                                    oHc.detalleHC = new List<DetalleHC>();
                                    oHc.detalleHC.Add(oDHc);
                                    //VERIFICAMOS SI TAMBIEN SE MODIFICO EL FACTOR RH Y SG
                                    modificacionRHyGS();
                                    //Obtenemos la nueva HC modificada.
                                    hc = gHC.obtenerHistoriaClinica(oP.nroHC);
                                    oHc.grupoSanguineo = hc.grupoSanguineo;
                                    oHc.factorRH = hc.factorRH;

                                    //---
                                    if (gHC.actualizarHistoriaClinica(oHc))
                                    {

                                        //ACTUALIZAMOS GRILLA DE DETALLE HC
                                        oDHc.codDetalle = gHC.ObtenerUltimoIdDetalleHC();
                                        MessageBox.Show("Se actualizó completamente la historia clínica", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        limpiarCampos();
                                        cargarGrillaAtencionActual(oDHc);
                                        FinAtencion fA = new FinAtencion();
                                        fA.atendido = true;
                                        //CAMBIAMOS EL ESTADO DEL TURNO
                                        if (timpoModalidad.CodTipoModalidad == 1)
                                        {
                                            fA.idTurno = this.idTurno;
                                            switch (idEstadoTurno)
                                            {

                                                case 3:
                                                    //Asistido no Cobrado
                                                    idEstadoTurno = 5;
                                                    break;
                                                case 4:
                                                    //Asistido  Cobrado
                                                    idEstadoTurno = 6;
                                                    break;

                                            }
                                            GestorAgendaTurnos.actualizarEstadoTurno(idTurno, idEstadoTurno);
                                            deshabilitarPanelActualizarHC();
                                            deshabilitarPanelHC();
                                        }
                                        else
                                        {//CAMBIAMOS EL ESTADO DE ORDEN DE LLEGADAS
                                            fA.idOrdenLLegada = this.idOrdenLLegada;
                                            GestorAgendaTurnos.actualizarEstadoOrdenLLegada(idOrdenLLegada, 1);
                                            deshabilitarPanelActualizarHC();
                                            deshabilitarPanelHC();
                                        }
                                        if (listPrac != null)
                                        {
                                            fA.lstPracticas = listPrac;
                                        }
                                        oEform = EstadoForm.consultando;
                                        //
                                    }

                                }//---

                            }//---
                            else
                            {
                                MessageBox.Show("Teiene que describir la atención de consulta", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                        }//--
                    }//---
                    else
                    {
                        this.Close();
                    }

                    break;
                case EstadoForm.consultando:
                    this.Close();
                    break;
                default:
                    break;
            }




        }//------
        //VERIFICAMOS SI CAMBIO EL FACTOR RH O GRPSANG
        private void modificacionRHyGS()
        {



            if (cmbFactorRH.SelectedIndex != -1)
            {

                FactorRH fr = (FactorRH)cmbFactorRH.SelectedItem;
                if (hc.factorRH != fr.id)
                {
                    GestorHistorialClinicos.actualizarHCxRH(oP.nroHC, fr.id);
                    cmbFactorRH.Enabled = false;

                }
                else
                {

                }
            }


            if (cmbGrpSang.SelectedIndex != -1)
            {



                GrupoSanguineo gs = (GrupoSanguineo)cmbGrpSang.SelectedItem;
                if (hc.grupoSanguineo != gs.id)
                {
                    GestorHistorialClinicos.actualizarHCxGRPS(oP.nroHC, gs.id);
                    cmbGrpSang.Enabled = false;

                }
                else
                {

                }
            }


        }
        //VERIFICAMOS  MODIFICACION DE ALGUN Text
        private void verificarEstadoForm()
        {
            int mod = 0;
            if (txtAnteceFam.Text != hc.antecedentesFamiliares)
            {

                mod = 1;
            }
            if (txtOtrasObser.Text != hc.Observaciones)
            {

                mod = 1;
            }

            if (!string.IsNullOrEmpty(txtIndicaciones.Text))
            {
                mod = 1;
            }

            if (!string.IsNullOrEmpty(txtDescrAtencion.Text))
            {
                mod = 1;
            }
            if (mod == 1)
            {
                oEcontrols = EstadoControles.modificado;
            }

            else
            {
                oEcontrols = EstadoControles.noModificado;
            }

        }
        //VALIDAMOS DATOS DEL FORM
        private bool validar()
        {
            bool res = true;
            string error = "";
            if (!string.IsNullOrEmpty(txtAltura.Text))
            {
                int altura;
                bool resultado;
                resultado = int.TryParse(txtAltura.Text, out altura);
                if (!resultado)
                {
                    res = false;
                    error += "La altura del paciente debe ingresarse con un valor numérico\r\n";
                }
            }
            if (!string.IsNullOrEmpty(txtPeso.Text))
            {
                int peso;
                bool resultado;
                resultado = int.TryParse(txtPeso.Text, out peso);
                if (!resultado)
                {
                    res = false;
                    error += "El peso del paciente debe ingresarse con un valor numérico\r\n";
                }
            }
            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return res;

        }

        //CAMBIOS EN LOS CHECKBOX
        #region CAMBIOS EN LOS CHECKBOX
        private void chkDiab_CheckedChanged(object sender, EventArgs e)
        {
            if (chkDiab.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void chkHepat_CheckedChanged(object sender, EventArgs e)
        {
            if (chkHepat.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void ChkAs_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkAs.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void chkHiper_CheckedChanged(object sender, EventArgs e)
        {
            if (chkHiper.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void chkCan_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCan.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void ChkCar_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkCar.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void ChkEnfMent_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkEnfMent.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void ChkEnfAlerg_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkEnfAlerg.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }

        private void chkOtras_CheckedChanged(object sender, EventArgs e)
        {
            if (chkOtras.Checked == true)
            {
                oEChk = EstadoChkBox.modificado;
            }
            else
            {
                oEChk = EstadoChkBox.noModificado;
            }
        }
        #endregion//------
        //ABRIMOS FORM DE PRACTICAS A REALIZAR
        private void btnAgregarPractice_Click(object sender, EventArgs e)
        {
            frmAgregarPracticasEnHc frmAgregarPracticas = new frmAgregarPracticasEnHc();
            frmAgregarPracticas.ShowDialog(this);
        }//-----
        //INTERFACE PRACTICAS, ACA SE AGREGAN LAS PRACTICAS A REALIZAR AL PACIENTE
        public void AddPracticas(List<Practica> lstPrac)
        {
            List<Practica> lstPractica = new List<Practica>();
            listPrac = lstPrac;
            foreach (Practica oP in lstPrac)
            {

                txtPracticas.Text += oP.nombre + "\n\r ";
            }


        }//---
        //LIMPIAR CAMPOS
        private void limpiarCampos()
        {
            txtDescrAtencion.Text = "";
            txtPracticas.Text = "";
            txtIndicaciones.Text = "";

        }
        //DESHABILITAR PANEL HISTORIA CLINICA
        #region PANELES
        private void deshabilitarPanelHC()
        {
            foreach (Control item in panleHC.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }
            }


        }
        //DESHABILITAR PANEL ACTUALIZAR HC
        private void deshabilitarPanelActualizarHC()
        {
            foreach (Control item in panelAtencionAlaFechaHC.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = true;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = false;
                }
            }

        }
        //-----
        private void habilitarPanelActualizarHC()
        {
            foreach (Control item in panelAtencionAlaFechaHC.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = false;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = true;
                }
            }
        }
        private void habilitarPanelHC()
        {
            foreach (Control item in panleHC.Controls)
            {
                if (item is TextBox)
                {
                    TextBox c = (TextBox)item;
                    c.ReadOnly = false;
                }

                else if (item is Label)
                {
                    item.Enabled = true;
                }
                else
                {
                    item.Enabled = true;
                }
            }
        }
        #endregion
        //CARGAMOS CAMPOS DE DETALLES HC SEGUN ID
        private void cargarCamposDetalleHCRegistrados(long id)
        {
            HistoriaClinica historiaClinica = gHC.obtenerHistoriaClinica(oP.nroHC);
            if (historiaClinica.detalleHC != null)
            {
                foreach (DetalleHC detalle in historiaClinica.detalleHC)
                {
                    lblAtencionALaFech.Text = "Atencion de la fecha " + detalle.fechaAtencion.ToString("dd/MM/yyyy");
                    if (detalle.codDetalle == id)
                    {
                        txtDescrAtencion.Text = detalle.descripcionAtencion;
                        txtAltura.Text = detalle.altura.ToString();
                        txtPeso.Text = detalle.peso.ToString();
                        txtIndicaciones.Text = detalle.indicaciones;
                        cmbDiagnostico.Text = detalle.diagnostico.nombre;
                        foreach (Practica oPr in detalle.lstPractica)
                        {
                            txtPracticas.Text = oPr.nombre + " \n\r " + txtPracticas.Text;
                        }
                        break;
                    }
                }
            }

        }
        //IMPRIMIR EL DETALLE DE LA HC
        private void obtenerDetalleHCAImprimir(long id)
        {

            HistoriaClinica historiaClinica = gHC.obtenerHistoriaClinica(oP.nroHC);
            if (historiaClinica.detalleHC != null)
            {
                foreach (DetalleHC detalle in historiaClinica.detalleHC)
                {
                    if (detalle.codDetalle == id)
                    {
                        Reportes.EntidadesReporte.EntidadHC eHC = new Reportes.EntidadesReporte.EntidadHC();
                       
                        eHC.nombreYApellido = oP.Apellido + ", " + oP.Nombre;
                        eHC.nroHC = oP.nroHC.ToString();
                        eHC.TipoYNumDoc = txtTDyND.Text;
                        eHC.Sexo = txtSexo.Text;
                        eHC.telefono = oP.Telefono.ToString();
                        eHC.celular = oP.Celular.ToString();
                        Domicilio od = Domicilios.obtenerDomicilio(oP.idDomicilio);
                        Barrio oB = Barrios.ObtenerBarrio(od.idBarrio);
                        Localidad oL = Localidades.ObtenerLocalidad(oB.idLocalidad);
                        eHC.domicilio = "Localidad: " + oL.nombre + "  /Barrio: " + oB.nombre + "  /Calle: " + od.calle + "  /Numero:" + od.numero;
                        eHC.fechaHC = detalle.fechaAtencion.ToString("dd/MM/yyyy");
                        eHC.fechaIMpresion = DateTime.Now.ToString("dd/MM/yyyy");
                        DateTime fechaNa = Convert.ToDateTime(oP.FechaNacimiento.ToString());
                        eHC.fechaNacimiento = fechaNa.ToString("dd/MM/yyyy");
                        eHC.descripcionAtencion = detalle.descripcionAtencion;
                        
                        if (historiaClinica.factorRH != null)
                        {
                            int idFactor = int.Parse(historiaClinica.factorRH.ToString());
                            Historiales_Clinicos.obtenerFactorXid(idFactor);
                        }
                        if (historiaClinica.grupoSanguineo != null)
                        {
                            int grupoSang = int.Parse(historiaClinica.grupoSanguineo.ToString());
                            Historiales_Clinicos.obtenerGruposSanguineosXid(grupoSang);
                        }
                        List<Antecedentes> lsA = Historiales_Clinicos.obtenerAntecedentesPersonales();
                        foreach (Antecedentes item in lsA)
                        {
                            foreach (Antecedentes it2 in historiaClinica.antecedentesXPaciente)
                            {
                                if (item.id==it2.id)
                                {
                                    eHC.antecedentes += item.nombre + ", ";
                                }
                            }
                        }
                        eHC.antecedentesFamiliares = historiaClinica.antecedentesFamiliares;
                        eHC.diagnostico = cmbDiagnostico.Text;
                        eHC.peso = detalle.peso.ToString();
                        eHC.altura = detalle.altura.ToString();
                        eHC.indicaciones = detalle.indicaciones;
                        eHC.descripcionAtencion = detalle.descripcionAtencion;
                        foreach (Practica oPr in detalle.lstPractica)
                        {
                            eHC.practicas += "-"+oPr.nombre +" \n\r ";
                        }
                        frmReporteHistoriaClinica frmRHC = new frmReporteHistoriaClinica(eHC);
                        frmRHC.ShowDialog();
                     
                        break;
                    }
                }
            }
        }

        //BTN NUEVA HC
        private void btnNuevaHC_Click(object sender, EventArgs e)
        {
            listAnt = new List<Antecedentes>();
            cmbFactorRH.Enabled = true;
            cmbGrpSang.Enabled = true;
            btnAgregarPractice.Enabled = true;
            lblAtencionALaFech.Text = "Atencion de la fecha " + DateTime.Now.ToString("dd/MM/yyyy");
            limpiarCampos();
            habilitarPanelActualizarHC();
            habilitarPanelHC();
            oEform = EstadoForm.Nuevo;
        }


        //SELECCIONA LA OPCION VER DETALLE o IMPRIMIR
        private void dtDetalleHC_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtDetalleHC.CurrentCell.OwningColumn == dtDetalleHC.Columns["VerDetalle"])
            {
                txtPracticas.Text = "";
                btnAgregarPractice.Enabled = false;
                oEform = EstadoForm.consultando;
                long id = long.Parse(dtDetalleHC.Rows[e.RowIndex].Cells["idDetalle"].Value.ToString());
                deshabilitarPanelActualizarHC();
                deshabilitarPanelHC();
                cargarCamposDetalleHCRegistrados(id);
            }
            if (dtDetalleHC.CurrentCell.OwningColumn == dtDetalleHC.Columns["Imprimir"])
            {
                txtPracticas.Text = "";
                btnAgregarPractice.Enabled = false;
                oEform = EstadoForm.consultando;
                long id = long.Parse(dtDetalleHC.Rows[e.RowIndex].Cells["idDetalle"].Value.ToString());
                deshabilitarPanelActualizarHC();
                deshabilitarPanelHC();
                obtenerDetalleHCAImprimir(id);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("¿Esta seguro que desea salir?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (r == DialogResult.Yes)
            {
                this.Close();
            }


        }




        private void panel2_Paint(object sender, PaintEventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }



    }
}
